package com.hymall.controller.admin;


import com.hymall.anno.AddLog;
import com.hymall.bean.MarketAdmin;
import com.hymall.bean.common.BasePageInfo;
import com.hymall.bean.common.BaseRespVo;
import com.hymall.bean.common.CommonData;
import com.hymall.service.admin.AdminService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * TODO 图片的上传和修改
 *
 * @author: 叶熠彬
 * @description: 系统管理 -> 管理员管理
 * @date: 2022/7/16 7:52
 */
@RestController
@RequestMapping("admin/admin")
public class AdminAdminController {

    private static final Integer INT_CREATED = 201;


    @Autowired
    AdminService adminService;

    /**
     * @author: 叶熠彬
     * @description: 显示管理员列表页面
     * @date: 2022/7/16 13:54
     * @param: [username, info]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @GetMapping("list")
    public BaseRespVo list(String username, BasePageInfo info) {
        CommonData data = adminService.queryAdminList(username, info);
        return BaseRespVo.ok(data);
    }


    /**
     * 增加管理员账号
     * 要求：用户名不可以重复
     * 用户名和密码不可小于6位
     *
     * @author: 叶熠彬
     * @date: 2022/7/16 15:09
     * @param: [admin]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @AddLog(action = "创建管理员", type = 1)
    @PostMapping("create")
    public BaseRespVo create(@RequestBody MarketAdmin admin) {
        if (admin.getUsername().length() < 6) {
            return BaseRespVo.error(601, "管理员名称不符合规定");
        }
        if (admin.getPassword().length() < 6) {
            return BaseRespVo.error(602, "管理员密码长度不能小于6");
        }
        //此功能老师没实现
        if (admin.getRoleIds().length == 0) {
            return BaseRespVo.error(603, "请选择管理员角色");
        }

        int code = adminService.addAdmin(admin);
        if (code == INT_CREATED) {
            return BaseRespVo.error(INT_CREATED, "管理员已存在");
        }
        MarketAdmin marketAdmin = adminService.queryAdminByUsername(admin.getUsername());
        if (marketAdmin == null) {
            return BaseRespVo.invalidData("添加失败");
        }
        return BaseRespVo.ok(marketAdmin);
    }

    /**
     * 修改管理员账号
     * 其中admin123不可修改
     * 由于页面会显示加密后的密码，
     *
     * @author: 叶熠彬
     * @date: 2022/7/16 16:19
     * @param: [admin]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @AddLog(action = "编辑管理员", type = 1)
    @PostMapping("update")
    public BaseRespVo update(@RequestBody MarketAdmin admin) {
        //根据adminID判断修改的是否为admin123
        if (admin.getId() == 1) {
            return BaseRespVo.invalidParameter("admin123账号不能修改");
        }
        if (admin.getUsername().length() < 6) {
            return BaseRespVo.error(601, "管理员名称不符合规定");
        }
        if (admin.getPassword().length() < 6) {
            return BaseRespVo.error(602, "管理员密码长度不能小于6");
        }
        //此功能老师没实现
        if (admin.getRoleIds().length == 0) {
            return BaseRespVo.error(603, "请选择管理员角色");
        }
        int code = adminService.updateAdminById(admin);
        if (code == 201) {
            return BaseRespVo.error(201, "该用户名已存在");
        }
        return BaseRespVo.ok(admin);
    }

    /**
     * 删除账号，其中admin123和自己的账号不可删除
     * TODO 判断自己的账号
     *
     * @author: 叶熠彬
     * @date: 2022/7/16 17:30
     * @param: [admin]
     * @return: com.hymall.bean.common.BaseRespVo
     */
    @AddLog(action = "删除管理员", type = 1)
    @PostMapping("delete")
    public BaseRespVo delete(@RequestBody MarketAdmin admin) {
        if (admin.getId() == 1) {
            return BaseRespVo.invalidParameter("admin123不可删除！");
        }
        int code = adminService.deleteAdmin(admin);
        if (code == 200) {
            return BaseRespVo.ok(admin);
        }
        return BaseRespVo.invalidParameter("删除失败");
    }

}
